const express = require('express');
const router = express.Router();
const multer = require('multer');
const path = require('path');
const { v4: uuidv4 } = require('uuid');
const materialController = require('../controllers/materialController');
const { authenticate, authorize, verifiedOnly } = require('../middlewares/auth');

// 配置文件上传
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, 'uploads/materials')
  },
  filename: (req, file, cb) => {
    // 生成唯一文件名
    const uniqueName = `${uuidv4()}${path.extname(file.originalname)}`;
    cb(null, uniqueName)
  }
});

// 文件类型过滤
const fileFilter = (req, file, cb) => {
  // 允许的文件类型
  const allowedTypes = [
    '.doc', '.docx', '.xls', '.xlsx', 
    '.ppt', '.pptx', '.pdf', 
    '.jpg', '.jpeg', '.png',
    '.zip', '.rar'
  ];
  
  const ext = path.extname(file.originalname).toLowerCase();
  if (allowedTypes.includes(ext)) {
    cb(null, true);
  } else {
    cb(new Error('不支持的文件类型'), false);
  }
};

const upload = multer({
  storage: storage,
  fileFilter: fileFilter,
  limits: {
    fileSize: 50 * 1024 * 1024 // 限制50MB
  }
});

// 公开路由
router.get('/', materialController.getMaterials); // 获取资料列表
router.get('/:id', materialController.getMaterialById); // 获取资料详情

// 需要认证的路由
router.use(authenticate); // 应用认证中间件

// 需要邮箱验证的路由
router.use(verifiedOnly);

// 上传资料（管理员或VIP用户）
router.post('/', 
  authorize('admin', 'vip'),
  upload.single('file'),
  materialController.uploadMaterial
);

// 更新资料（上传者或管理员）
router.put('/:id',
  materialController.updateMaterial
);

// 删除资料（上传者或管理员）
router.delete('/:id',
  materialController.deleteMaterial
);

// 生成下载链接
router.post('/:id/download',
  authenticate,
  verifiedOnly,
  materialController.generateDownloadLink
);

// 文件下载
router.get('/:id/download-file',
  materialController.downloadFile
);

// 错误处理中间件
router.use((error, req, res, next) => {
  if (error instanceof multer.MulterError) {
    if (error.code === 'LIMIT_FILE_SIZE') {
      return res.status(400).json({
        success: false,
        message: '文件大小不能超过50MB'
      });
    }
  }
  
  console.error('资料路由错误:', error);
  res.status(500).json({
    success: false,
    message: error.message || '服务器错误'
  });
});

module.exports = router;